from scipy.optimize import linprog


def get_min(c, a_ub=None, b_ub=None, a_ed=None, b_ed=None, bounds=None, method='revised simplex'):
    """

    :param c: 优化目标：极小值；若为极大值，需要 * -1 来反向
    :param a_ub: 约束条件：不等式的左侧
    :param b_ub: 约束条件：不等式的右侧值(需要 <=，若 >=，则需要将不等式两边同时 * -1 来 将 >= 调整为 <=)
    :param a_ed: 约束条件：等式左侧
    :param b_ed: 约束条件：等式右侧
    :param bounds: 约束条件：变量的限制范围
    :param method: 算法
      支持算法
       1、highs-ds
       2、highs-ipm
       3、highs
       4、interior-point(默认)
       5、revised simplex
       6、simplex
    :return:
      1、fun：优化目标的极小值(返回数值),若为最大值，需要 * -1
      2、x：数组，约束变量取优化目标值时的对应值
      3、slack：松弛变量
      4、nit：迭代次数
      5、con：等式(若存在)约束残差：b_ed - a_ed * x
    """
    return linprog(c, a_ub, b_ub, a_ed, b_ed, bounds=bounds, method=method)
